from datetime import datetime
from django.db import models


class Patient(models.Model):
    '''
    档案用户(微信用户)
    '''
    GENDER_CHOICES = ((0, '未知'), (1, '男'), (2, '女'))
    name = models.CharField(db_comment='姓名', max_length=32)
    id_card = models.CharField(db_comment='身份证号', max_length=18, unique=True, null=True, blank=True, db_index=True)
    phone = models.CharField(db_comment='手机号码', max_length=11, null=True, blank=True)
    gender = models.SmallIntegerField(db_comment='性别', choices=GENDER_CHOICES, default=0, null=True, blank=True)
    birth = models.DateField(db_comment='出生日期', null=True, blank=True)
    parent_name = models.CharField(db_comment='父母姓名', max_length=20, null=True, blank=True)
    parent_phone = models.CharField(db_comment='父母电话', max_length=11, null=True, blank=True)

    # 微信同步的用户信息
    openid = models.CharField(db_comment='微信OpenID', max_length=128, unique=True, null=True, blank=True)
    status = models.BooleanField(db_comment="状态", default=True, blank=True)
    create_time = models.DateTimeField(db_comment='创建时间', auto_now_add=True, null=True, blank=True)
    update_time = models.DateTimeField(db_comment='更新时间', auto_now=True, null=True, blank=True)

    creator = models.ForeignKey(db_comment='创建者', to='system.User', on_delete=models.DO_NOTHING, db_constraint=False, null=True, blank=True)

    class Meta:
        db_table = 'tb_patient'
        ordering = ['-create_time']
        db_table_comment = "患者表"


    def __str__(self):
        return self.name


class Batch(models.Model):
    '''
    筛查计划（批次）
    '''
    number = models.CharField(db_comment='批号', max_length=10, unique=True, blank=True)
    semester = models.CharField(db_comment='学期', max_length=20, null=True, blank=True)
    total = models.PositiveSmallIntegerField(db_comment='总人数', null=True, blank=True)
    school = models.ForeignKey(db_comment='学校', to='system.Dept', related_name='batch_school', on_delete=models.DO_NOTHING, db_constraint=False, null=True, blank=True)
    hospital = models.ForeignKey(db_comment='医院', to='system.Dept', related_name='batch_hospital', on_delete=models.DO_NOTHING, db_constraint=False, null=True, blank=True)
    description = models.CharField(db_comment='备注信息', max_length=512, null=True, blank=True)

    create_time = models.DateTimeField(db_comment='创建时间', auto_now_add=True, null=True, blank=True)
    update_time = models.DateTimeField(db_comment='更新时间', auto_now=True, null=True, blank=True)
    status = models.BooleanField(db_comment="状态", default=True, blank=True)
    end_time = models.DateField(db_comment='结束时间', null=True, blank=True)
    creator = models.ForeignKey(db_comment='创建者', to='system.User', on_delete=models.DO_NOTHING, db_constraint=False, null=True, blank=True)

    class Meta:
        db_table = 'tb_batch'
        ordering = ['-create_time']
        db_table_comment = "筛查计划（批次）表"


    def generate_number(self):
        '''自动生成批号：日期 + 自增长（2位数） 20220328xx'''
        user_count = Batch.objects.filter(create_time__gte=datetime.now().date()).count()
        user_count_suffix = str(user_count)
        time_prefix = datetime.now().date().strftime("%Y%m%d")
        self.number = time_prefix + user_count_suffix.zfill(2)

    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        if not self.number:
            self.generate_number()
        super().save(force_insert, force_update, using, update_fields)

    def __str__(self):
        return self.number


class Report(models.Model):
    '''检查报告'''
    STATE_CHOICES = ((0, '初筛'), (1, '复测'), (2, '复查'))
    Glasses_Type_CHOICES = ((0, '不戴镜'), (1, '框架镜'), (2, '角膜塑形镜'), (3, '其他塑形镜'))
    # class GlassesTypeChoices(models.IntegerChoices):


    number = models.CharField(db_comment='检查单号', max_length=14, unique=True, blank=True)
    age = models.PositiveSmallIntegerField(db_comment='检查时年龄', null=True, blank=True)
    report_type = models.PositiveSmallIntegerField(db_comment='报告类别', choices=STATE_CHOICES, default=0)

    stage = models.CharField(db_comment='学段', max_length=50, blank=True, null=True)
    grade = models.CharField(db_comment='年级', max_length=50, blank=True, null=True)
    doctor = models.ForeignKey(db_comment='医生', to='system.User', on_delete=models.DO_NOTHING, db_constraint=False, related_name='report_doctor', null=True, blank=True)
    batch = models.ForeignKey(db_comment='批号', to='archive.Batch', on_delete=models.DO_NOTHING, db_constraint=False, null=True, blank=True)
    patient = models.ForeignKey(db_comment='患者', to='archive.Patient', on_delete=models.DO_NOTHING, db_constraint=False, null=True, blank=True)

    is_myopia = models.BooleanField(db_comment='是否近视', default=False)

    # 视力检查
    # Oculus dexter      od 右眼
    # oculur sinister    os左眼
    # Oculus uterque     ou双眼
    # VA=visual acuity 视敏度
    # 裸眼视力 SC=sine correctore 裸眼
    OS_VASC = models.CharField(db_comment='左_裸眼视力', max_length=8, null=True, blank=True)
    OD_VASC = models.CharField(db_comment='右_裸眼视力', max_length=8, null=True, blank=True)
    # 矫正视力 CC=cum correctore 戴镜
    OS_VACC = models.CharField(db_comment='左_戴镜视力', max_length=8, null=True, blank=True)
    OD_VACC = models.CharField(db_comment='右_戴镜视力', max_length=8, null=True, blank=True)
    # 球镜（近、远视度数）
    OS_Sph = models.CharField(db_comment='左_球镜', max_length=8, null=True, blank=True)
    OD_Sph = models.CharField(db_comment='右_球镜', max_length=8, null=True, blank=True)
    # 柱镜（散光度数）Cyl=cylindrical 柱镜
    OS_Cyl = models.CharField(db_comment='左_柱镜', max_length=8, null=True, blank=True)
    OD_Cyl = models.CharField(db_comment='右_柱镜', max_length=8, null=True, blank=True)
    # 轴位（散光方向）Axis=轴位
    OS_Axis = models.CharField(db_comment='左_轴位', max_length=8, null=True, blank=True)
    OD_Axis = models.CharField(db_comment='右_轴位', max_length=8, null=True, blank=True)
    # 轴距 AL=axis length 眼轴长度
    OS_AL = models.CharField(db_comment='左_眼轴', max_length=8, null=True, blank=True)
    OD_AL = models.CharField(db_comment='右_眼轴', max_length=8, null=True, blank=True)
    # 瞳距 PD=Papillary Distanc 瞳距
    OS_PD = models.CharField(db_comment='左_瞳距', max_length=8, null=True, blank=True)
    OD_PD = models.CharField(db_comment='右_瞳距', max_length=8, null=True, blank=True)
    # 等效球镜 Sph=spherical 球镜
    OS_SE = models.CharField(db_comment='左_等效球镜', max_length=8, null=True, blank=True)
    OD_SE = models.CharField(db_comment='右_等效球镜', max_length=8, null=True, blank=True)
    # 眼压 IOP=眼压
    OS_IOP = models.CharField(db_comment='左_眼压', max_length=8, null=True, blank=True)
    OD_IOP = models.CharField(db_comment='右_眼压', max_length=8, null=True, blank=True)
    # 电脑验光	Computer optometry
    # 主觉验光	subjective optometry
    # 小瞳	microcoria
    # 散瞳	mydriasis
    # 角膜曲率	corneal curvature
    # 角膜厚度	corneal thickness
    # 屈光性屈光不正	refractive ametropia
    # 眼底照相	fundus photography
    # 裂隙灯检查	slit lamp examination

    glasses_type = models.SmallIntegerField(db_comment='眼镜类型', choices=Glasses_Type_CHOICES, default=0)
    other = models.CharField(db_comment='有其他特殊情况', max_length=512, null=True, blank=True)
    conclusion = models.CharField(db_comment='筛查结论', max_length=512, null=True, blank=True)
    suggest = models.CharField(db_comment='处理建议', max_length=512, null=True, blank=True)

    description = models.CharField(db_comment='备注', max_length=512, null=True, blank=True)
    create_time = models.DateTimeField(db_comment='创建时间', auto_now_add=True, null=True, blank=True)
    update_time = models.DateTimeField(db_comment='更新时间', auto_now=True, null=True, blank=True)

    creator = models.ForeignKey(db_comment='创建者', to='system.User', on_delete=models.DO_NOTHING, db_constraint=False, null=True, blank=True)

    def generate_number(self):
        user_count = Report.objects.filter(create_time__gte=datetime.now().date()).count()
        user_count_suffix = str(user_count)
        time_prefix = datetime.now().date().strftime("%Y%m%d")
        self.number = time_prefix + user_count_suffix.zfill(6)

    def analysis(self, check_result_id):
        '''
        写入对应的结果和建议
        '''
        check_result = CheckResult.objects.get(pk=check_result_id)
        self.conclusion = check_result.conclusion
        self.suggest = check_result.suggest

    def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
        if not self.number:
            # 如果没有报告单号，自动生成
            self.generate_number()
        if not self.suggest and not self.conclusion:
            # 如果报告内没有手动输入筛查结论，则在后台自动生成结论
            judge_result(self)
        super().save(force_insert, force_update, using, update_fields)

    def __str__(self):
        return self.number

    class Meta:
        db_table = 'tb_report'
        ordering = ['-create_time']
        db_table_comment = "筛查报告表"



class CheckResult(models.Model):
    '''
    检查结果
    '''
    conclusion = models.CharField(db_comment='筛查结论', max_length=200, null=True, blank=True)
    suggest = models.CharField(db_comment='处理建议', max_length=200, null=True, blank=True)

    class Meta:
        db_table = 'tb_check_result'
        db_table_comment = "检查结果表"


    def __str__(self):
        return '检查结果：{}'.format(self.id)


# 计算诊断结果
def judge_result(self):
    if self.glasses_type == 2:  # 角膜塑形镜
        if all((self.OD_VASC is not None, self.OS_VASC is not None)):
            if any((float(self.OD_VASC) < 4.9, float(self.OS_VASC) < 4.9)):  # 如果任一眼“裸眼远视力”<4.9
                if self.other:
                    self.analysis(23)
                    pass
                    # 二三
                    # 1、筛查结果：“戴镜类型为2（夜戴角膜塑型镜）”，且任一眼“戴镜远视力” < 4.9；（备注，夜戴角膜塑型镜，不查“裸眼远视力”，或说“裸眼远视力”即为“戴镜远视力”），并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                    # 2、则“筛查结论”： （1）戴镜远视力 < 4.9，可能存在近视进行性加深。（2）筛查发现可能存在其他眼科疾病。
                    # 3、则“处理建议”： （1）严格注意用眼卫生和眼部卫生 ；（2）到医疗机构接受检查了解是否为近视加深，并进一步明确诊断是否存在其他眼病。
                else:
                    self.analysis(11)
                    pass
                    # 十一、情况之十一
                    # 1、筛查结果：“戴镜类型为2（夜戴角膜塑型镜）”，且任一眼“戴镜远视力” < 4.9；（备注，夜戴角膜塑型镜，不查“裸眼远视力”，或说“裸眼远视力”即为“戴镜远视力”）。且“其他特殊情况”无任何异常。
                    # 2、则“筛查结论”： 戴镜远视力 < 4.9，可能存在近视进行性加深。
                    # 3、则“处理建议”： （1）严格注意用眼卫生和眼部卫生 ；（2）到医疗机构接受检查了解是否为近视加深。
            else:  # 如果任一眼“裸眼远视力”>=4.9
                if self.other:
                    self.analysis(24)
                    pass
                    # 二四、
                    # 2、1、筛查结果：“戴镜类型为2（夜戴角膜塑型镜）”，且任一眼“戴镜远视力”≧4.9；（备注，夜戴角膜塑型镜，不查“裸眼远视力”，或说“裸眼远视力”即为“戴镜远视力”）。并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                    # 2、则“筛查结论”： （1）戴镜远视力≧4.9；（2）可能存在其他眼科疾病。
                    # 3、则“处理建议”： （1）严格注意用眼卫生和眼部卫生；（2） 请到医疗机构接受检查，明确诊断。
                else:
                    self.analysis(12)
                    pass
                    # 十二、情况之十二
                    # 1、筛查结果：“戴镜类型为2（夜戴角膜塑型镜）”，且任一眼“戴镜远视力”≧4.9；（备注，夜戴角膜塑型镜，不查“裸眼远视力”，或说“裸眼远视力”即为“戴镜远视力”）。且“其他特殊情况”无任何异常。
                    # 2、则“筛查结论”： 戴镜远视力≧4.9。
                    # 3、则“处理建议”： （1）严格注意用眼卫生和眼部卫生，如有眼部不适及时就医；（2）定期到医疗机构复查。
    else:  # 不戴镜、框架镜、其他其他塑形镜
        if all((float(self.OD_VASC) is not None, float(self.OS_VASC) is not None)) and any(
                (float(self.OD_VASC) < 4.9, float(self.OS_VASC) < 4.9)):
            if self.glasses_type in (1, 3):  # 框架镜、其他其他塑形镜
                if all((float(self.OD_VACC) is not None, float(self.OS_VACC) is not None)):
                    if any((float(self.OD_VACC) < 4.9, float(self.OS_VACC) < 4.9)):  # 任一眼视力均 ＜ 4.9
                        if self.other:
                            self.analysis(13)
                            pass
                            # 十三、情况之十三
                            # 1、筛查结果：如果任一眼“裸眼远视力” < 4.9，且“戴镜类型为1（框架眼镜）或3（其他角膜接触镜）”，且“戴镜远视力” < 4.9，如“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                            # 2、则“筛查结论”：（1）裸眼远视力下降，戴镜远视力下降。（2）筛查发现可能存在其他眼科疾病。
                            # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                        else:
                            self.analysis(1)
                            pass
                            # 一、情况之一（此种情况时，不必考虑其验光仪检查的结果）
                            # 1、筛查结果：如果任一眼“裸眼远视力” < 4.9，且“戴镜类型为1（框架眼镜）或3（其他角膜接触镜）”，且“戴镜远视力” < 4.9，且“其他特殊情况”无任何异常。
                            # 2、则“筛查结论”：裸眼远视力下降，戴镜远视力下降。
                            # 3、则“处理建议”：请及时到医疗机构复查。
                    elif all((float(self.OD_VACC) >= 4.9, float(self.OS_VACC) >= 4.9)):  # 双眼视力均 ≥ 4.9
                        if self.other:
                            self.analysis(14)
                            pass
                            # 十四、
                            # 1、筛查结果：如果任一眼“裸眼远视力” < 4.9，且“戴镜类型为1（框架眼镜）或3（其他角膜接触镜）”，且“戴镜远视力”≧4.9，如“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。。
                            # 2、则“筛查结论”：（1）裸眼远视力下降，戴镜远视力≧4.9。（2）筛查发现可能存在其他眼科疾病。
                            # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                        else:
                            self.analysis(2)
                            pass
                            # 二、情况之二（此种情况时，不必考虑其验光仪检查的结果）
                            # 1、筛查结果：如果任一眼“裸眼远视力” < 4.9，且“戴镜类型为1（框架眼镜）或3（其他角膜接触镜）”，且“戴镜远视力”≧4.9，且“其他特殊情况”无任何异常。
                            # 2、则“筛查结论”：裸眼远视力下降，戴镜远视力≧4.9。
                            # 3、则“处理建议”：请3个月或半年1次检查裸眼视力和戴镜视力。
            else:  # 不戴眼镜
                if all((float(self.OD_SE) is not None, float(self.OS_SE) is not None, float(self.OD_SE) is not None,
                        float(self.OS_SE) is not None, float(self.OD_Cyl) is not None, float(self.OS_Cyl) is not None)):
                    if self.stage == '小学':
                        if all((float(self.OD_SE) >= 0.00, float(self.OS_SE) >= 0.00, float(self.OD_SE) < 2.00, (self.OS_SE) < 2.00,
                                abs(float(self.OD_Cyl)) < 1.50, abs(float(self.OS_Cyl)) < 1.50)):
                            if self.other:
                                self.analysis(17)
                                pass
                                # 十七、
                                # 1、筛查结果：如果任一眼：“裸眼远视力” < 4.9；且已配戴眼镜“戴镜类型为4（不戴镜）”，且“小学生”（“年级”≦6）；“验光仪检测结果”符合三者任一情形：（1）SE≥﹢2.00
                                # D，（2）SE＜0.00
                                # D，（3）柱镜(散光)
                                # 绝对值≥1.50
                                # D；并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                                # 2、则“筛查结论”：（1）裸眼远视力下降，屈光不正筛查阳性。（2）筛查发现可能存在其他眼科疾病。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                            else:
                                self.analysis(5)
                                pass
                                # 五、情况之五
                                # 1、筛查结果：如果任一眼：“裸眼远视力” < 4.9；且已配戴眼镜“戴镜类型为4（不戴镜）”，且“小学生”（“年级”≦6）；“验光仪检测结果”符合三者任一情形：
                                # （1）SE≥﹢2.00D，（2）SE＜0.00D，（3）柱镜(散光)
                                # 绝对值≥1.50
                                # D；且“其他特殊情况”无任何异常。
                                # 2、则“筛查结论”：裸眼远视力下降，屈光不正筛查阳性。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                        else:
                            if self.other:
                                self.analysis(15)
                                pass
                                # 十五、
                                # 1、筛查结果：如果任一眼：“裸眼远视力” < 4.9；且“戴镜类型为4（不戴镜）”，且“小学生”（“年级”≦6）；“验光仪检测结果”符合：（1）0.00
                                # D≤SE＜﹢2.00
                                # D（SE = 球镜度数 + 1 / 2 * 柱镜度数，且（2）且柱镜(散光)
                                # 绝对值＜1.50
                                # D；并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                                # 2、则“筛查结论”：（1）裸眼远视力下降，视功能可能异常。（2）筛查发现可能存在其他眼科疾病。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                            else:
                                self.analysis(3)
                                pass
                                # 三、情况之三
                                # 1、筛查结果：如果任一眼：“裸眼远视力” < 4.9；且“戴镜类型为4（不戴镜）”，且“小学生”（“年级”≦6）；“验光仪检测结果”符合：（1）0.00
                                # D≤SE＜﹢2.00
                                # D（SE = 球镜度数 + 1 / 2 * 柱镜度数，且（2）且柱镜(散光)
                                # 绝对值＜1.50
                                # D；且“其他特殊情况”无任何异常。
                                # 2、则“筛查结论”：裸眼远视力下降，视功能可能异常。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                    else:  # 中学生
                        if all((float(self.OD_SE) >= -0.50, float(self.OS_SE) >= -0.50, float(self.OD_SE) < 3.00, float(self.OS_SE) < 3.00,
                                abs(float(self.OD_Cyl)) < 1.50, abs(float(self.OS_Cyl)) < 1.50)):
                            if self.other:
                                self.analysis(16)
                                pass
                                # 十六、
                                # 1、筛查结果：如果任一眼：“裸眼远视力”<4.9；且“戴镜类型为4（不戴镜）”，且“中学生”（“年级”≥7）；“验光仪检测结果”符合：（1）-0.50 D≤SE＜﹢3.00 D（SE=球镜度数+1/2*柱镜度数，且（2）柱镜(散光)绝对值＜1.50 D；并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                                # 2、则“筛查结论”：（1）裸眼远视力下降，视功能可能异常。（2）筛查发现可能存在其他眼科疾病。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                            else:
                                self.analysis(4)
                                pass
                                # 四、情况之四
                                # 1、筛查结果：如果任一眼：“裸眼远视力” < 4.9；且“戴镜类型为4（不戴镜）”，且“中学生”（“年级”≥7）；“验光仪检测结果”符合：（1）-0.50
                                # D≤SE＜﹢3.00
                                # D（SE = 球镜度数 + 1 / 2 * 柱镜度数，且（2）柱镜(散光)
                                # 绝对值＜1.50
                                # D；且“其他特殊情况”无任何异常。
                                # 2、则“筛查结论”：裸眼远视力下降，视功能可能异常。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                        else:
                            if self.other:
                                self.analysis(18)
                                pass
                                # 十八
                                # 1、筛查结果：如果任一眼：“裸眼远视力” < 4.9；且已配戴眼镜“戴镜类型为4（不戴镜）”，且“中学生”（“年级”≥7）；“验光仪检测结果”符合三者任一情形：（1）SE≥﹢3.00
                                # D ，（2）SE＜-0.50
                                # D，（3）柱镜(散光)
                                # 绝对值≥1.50
                                # D；并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                                # 2、则“筛查结论”：（1）裸眼远视力下降，屈光不正筛查阳性。（2）筛查发现可能存在其他眼科疾病。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                            else:
                                self.analysis(6)
                                pass
                                # 六、情况之六
                                # 1、筛查结果：如果任一眼：“裸眼远视力” < 4.9；且已配戴眼镜“戴镜类型为4（不戴镜）”，且“中学生”（“年级”≥7）；“验光仪检测结果”符合三者任一情形：（1）SE≥﹢3.00
                                # D ，（2）SE＜-0.50
                                # D，（3）柱镜(散光)
                                # 绝对值≥1.50
                                # D；且“其他特殊情况”无任何异常。
                                # 2、则“筛查结论”：裸眼远视力下降，屈光不正筛查阳性。
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
        else:  # 裸眼远视力 >= 4.9
            if all((self.OD_SE is not None, self.OS_SE is not None)):
                if all((float(self.OD_SE) >= 0, float(self.OS_SE) >= 0)):
                    if float(self.age) >= 7:
                        if self.other:
                            self.analysis(19)
                            pass
                            # 十九、
                            # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且SE≥0.00
                            # D；且年龄≥7；并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                            # 2、则“筛查结论”： 裸眼远视力≥4.9，目前尚无近视高危因素，但筛查发现可能存在其他眼科疾病。
                            # 3、则“处理建议”： 请到医疗机构接受检查，明确诊断，并且及时采取措施。
                        else:
                            self.analysis(7)
                            pass
                            # 七、情况之七
                            # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且SE≥0.00
                            # D；且年龄≥7；且“其他特殊情况”无任何异常。
                            # 2、则“筛查结论”： 裸眼远视力≥4.9，目前尚无近视高危因素。
                            # 3、则“处理建议”： 请定期（每6个月）进行视力和屈光度筛查。
                    else:
                        if all((float(self.OD_SE) < 2.00, float(self.OS_SE) < 2.00)):
                            if self.other:
                                self.analysis(21)
                                pass
                                # 二一
                                # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且 + 2.00
                                # D＞SE≥0.00
                                # D，且年龄＜7。并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                                # 2、则“筛查结论”： 裸眼远视力≥4.9，目前尚无近视高危因素。但筛查发现可能存在其他眼科疾病。
                                # 3、则“处理建议”： 请到医疗机构接受检查，明确诊断，并且及时采取措施。
                            else:
                                self.analysis(9)
                                pass
                                # 九、情况之九
                                # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且+2.00 D＞SE≥0.00 D，且年龄＜7。且“其他特殊情况”无任何异常。
                                # 2、则“筛查结论”： 裸眼远视力≥4.9，目前尚无近视高危因素。
                                # 3、则“处理建议”： 请定期（每6个月）进行视力和屈光度筛查。
                        else:  # 任一眼 >= 2.00
                            if self.other:
                                self.analysis(20)
                                pass
                                # 二十
                                # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且年龄＜7。有任一眼SE≥+2.00
                                # D，并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                                # 2、则“筛查结论”：（1）怀疑远视异常；（2）筛查发现可能存在其他眼科疾病.
                                # 3、则“处理建议”：请到医疗机构接受检查，明确诊断，并且及时采取措施。
                            else:
                                self.analysis(8)
                                pass
                                # 八、情况之八
                                # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且年龄＜7。有任一眼SE≥+2.00
                                # D，且“其他特殊情况”无任何异常。
                                # 2、则“筛查结论”：怀疑远视异常；
                                # 3、则“处理建议”：请到医疗机构接受检查，并且及时采取措施。
                else:  # 任一眼SE＜0.00
                    if self.other:
                        self.analysis(22)
                        pass
                        # 二二
                        # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且任一眼SE＜0.00
                        # D；并在“其他特殊情况”中存在异常情况“眼睑异常”、“斜视”、“白瞳症”、“其他眼部异常”中的任一项或多项。
                        # 2、则“筛查结论”：（1） 裸眼远视力≥4.9，可能存在近视高危因素。（2）筛查发现可能存在其他眼科疾病.
                        # 3、则“处理建议”： （1）严格注意用眼卫生 ；（2）到医疗机构接受检查了解是否可能发展为近视，并进一步明确诊断，及时采取措施。
                    else:
                        self.analysis(10)
                        pass
                        # 十、情况之十
                        # 1、筛查结果：任一眼“裸眼远视力”≥4.9，且任一眼SE＜0.00 D；且“其他特殊情况”无任何异常。
                        # 2、则“筛查结论”： 裸眼远视力≥4.9，可能存在近视高危因素。
                        # 3、则“处理建议”： （1）严格注意用眼卫生 ；（2）到医疗机构接受检查了解是否可能发展为近视。
